# 1. 导入必要库
from sklearn.feature_extraction.text import CountVectorizer  # 用于构建词袋模型
from sklearn.naive_bayes import MultinomialNB  # 朴素贝叶斯分类器
from sklearn.pipeline import make_pipeline  # 构建训练流程
import jieba  # 中文分词库
import numpy as np

# 2. 准备语料和标签（1 表示正面，0 表示负面）
texts = [
    "这家店的菜太难吃了",       # 0
    "服务态度很差，再也不来了",  # 0
    "菜品很丰富，味道不错",     # 1
    "真是一次愉快的用餐体验",     # 1
    "价格太贵，吃不饱",         # 0
    "环境很好，服务也周到"       # 1
]
labels = [0, 0, 1, 1, 0, 1]

# 3. 使用 jieba 进行分词，并以空格连接适配 CountVectorizer
texts_cut = [" ".join(jieba.cut(text)) for text in texts]

# 输出分词结果
print("【分词结果】：")
for i, text in enumerate(texts_cut):
    print(f"句子{i+1}：{text}")

# 4. 初始化 CountVectorizer，并拟合语料库
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts_cut)

# 输出词表（词袋）
print("\n【词表（Vocabulary）】：")
print(vectorizer.get_feature_names_out())

# 输出向量表示（词频矩阵）
print("\n【词频向量表示】：")
print(X.toarray())

# 5. 使用朴素贝叶斯分类器进行训练
model = MultinomialNB()
model.fit(X, labels)

# 6. 测试新样本
test_comments = [
    "服务不好，东西也难吃",   # 0
    "饭很好吃，环境也不错",   # 1
    "太贵了，不推荐",       # 0
    "下次还会来，真的很满意"  # 1
]
test_cut = [" ".join(jieba.cut(comment)) for comment in test_comments]

# 输出测试分词
print("\n【测试集分词】：")
for i, sent in enumerate(test_cut):
    print(f"测试{i+1}：{sent}")

# 将测试语句转换为词袋向量
X_test = vectorizer.transform(test_cut)

# 输出测试向量
print("\n【测试集向量】：")
print(X_test.toarray())

# 7. 执行预测
predictions = model.predict(X_test)

# 输出最终预测结果
print("\n【情感预测结果】：")
for comment, label in zip(test_comments, predictions):
    print(f"'{comment}' → {'正面' if label == 1 else '负面'}")